import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' #屏蔽TensorFlow日志
from clipboard import setText
from capturescreen import CTkPrScrn
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image

def debugshow(img):
    if (isinstance(img,np.ndarray)):
        s=Image.fromarray(img)
    else:
        s=img
    plt.figure()
    plt.imshow(s)
    plt.show()
def debugshowlist(list,num=5):
    for i,img in enumerate(list):
        if (isinstance(img,np.ndarray)):
            s=Image.fromarray(img)
        else:
            s=img
        plt.subplot(i//num+1,num,i%num+1)
        plt.imshow(s)
    plt.show()

##########扫描分割（缺点连在一起的字符无法分割）
"""
返回： 分割后的字符图片，多行多列
"""
def scanGap():
    line_range=[] #图像分割成多行的y轴像素点数值 类似(1-7像素为一行) 8-14像素为一行

    #获取行
    line_data=np.where(~img.any(axis=1))[0] #获取所有像素都是空的行 ~反转true false
    line_heightmin=7 #最小行高
    for y1,y2 in zip(line_data[:-1],line_data[1:]):
        if y2-y1>line_heightmin:
            line_range.append((y1+1,y2))
    if len(line_range)==0: #如果分割不了就用整块
        line_range.append((0,img.shape[0]))
    # ifdebug(lambda : [debugshow(imggrab[line[0]:line[1]]) for line in line_range]) #如果是调试模式显示所有的列
    
    
    # 获取格子
    col_widthmin=1 #最小列宽
    cell_range=[]
    for y1,y2 in line_range:
        line=img[y1:y2] #获取单行图像数据
        col_data=np.where(~line.any(axis=0))[0] # 计算间隔
        col_range=[]
        for x1,x2 in zip(col_data[:-1],col_data[1:]):
            if x2-x1>col_widthmin:
                col_range.append((x1+1,y1,x2,y2))
        # ifdebug(lambda : [debugshow(imggrab[:,col[0]:col[2]]) for col in col_range]) #如果是调试模式显示所有的行
        cell_range.append([screen.crop(i) for i in col_range])
    # ifdebug(lambda : print("识别为%s行，共%s个字符" % (len(cell_range), np.sum([len(i) for i in cell_range]))))
    # ifdebug(lambda : debugshowlist(cell_range[0],5) )
    return cell_range

def cvSplit():

    cellLine=scanGap()

    splitimg=cellLine[0][3]

    # for line in cellLine:
    #     for cell in line:
    #         cell
    import cv2
    list=cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,6,5)
    print(len(list))


if  __name__ == '__main__':
    
    debug=True
    ifdebug=lambda lam: lam() if debug else None #debug方法

    #获取截图
    # img=CTkPrScrn().getScreen()
    screen=Image.open("ocrdata/test.png")

    # 二值化
    imggrab=np.mean(screen,-1) #灰度 rgb变单通道
    img=np.where(imggrab[...,:] < 130, 0, 1) # 二值化 #黑色128

    cell_range=cvSplit()

    from ocr import predictflex
    result=[]
    for line in cell_range: #解析每行
        for font in line: #解析每个字
            # print(font)
            ifdebug(lambda : debugshow(font)) #如果是调试模式显示所有的文字
            result.append(predictflex(font))
            # break

    print(result)
